
package com.kugou.game.sdk.api.common;

import com.kugou.game.sdk.core.SDKControler;
import com.kugou.game.sdk.core.UserManager;
import com.kugou.game.sdk.statistics.StatCmd;
import com.kugou.game.sdk.statistics.StaticsManager;

import android.app.Activity;
import android.util.Log;

/**
 * 描述:单机和网游SDK共用的函数写在此类，抽象函数不要写在这里，直接写到对应的子类去。
 * 
 * @author chenys
 * @since 2014-12-16 上午11:45:50
 */
public abstract class BasePlatform {

    public static void checkDebugMode() {
        if (SDKControler.isDebugMode()) {
            Log.e(SDKControler.KUGOU_SDK_TAG,
                    ">>>>>>>>>>>>>当前处于调试模式环境， 请在接入完成之后调用KGPlatform.setDebugMode(false)，设置为正式模式环境<<<");
        }
    }

    /**
     * 是否初始化
     */
    public static void checkInit() {
        if (!SDKControler.isInitialize()) {
            throw new RuntimeException("sdk还没有初始化.");
        }
    }

    /**
     * 获取当前用户信息
     * 
     * @return
     */
    public static User getCurrentUser() {
        checkInit();
        return UserManager.getInstance().getCurrentUser();
    }

    /**
     * 进入充值中心（普通充值）
     * 
     * @param activity
     * @param payInfo 充值需要的信息
     */
    public static void enterRechargeCenter(Activity activity, KGPayInfo payInfo) {
        checkInit();
        SDKControler.setKGPayInfo(payInfo);
        SDKControler.enterRechargeCenter(activity);
    }

    /**
     * 进入充值中心（定额充值）
     * 
     * @param activity
     * @param payInfo 充值需要的信息
     * @param moneyNum 充值金额
     */
    public static void enterRechargeCenter(Activity activity, KGPayInfo payInfo, int moneyNum) {
        checkInit();
        SDKControler.setKGPayInfo(payInfo);
        SDKControler.enterRechargeCenter(activity, moneyNum);
    }

    /**
     * 进入注册页面
     */
    public static void enterRegister(Activity activity) {
        checkInit();
        SDKControler.enterRegister(activity);
    }

    /**
     * 进入游戏中心
     */
    public static void enterGameCenter(Activity activity) {
        checkInit();
        SDKControler.enterGameCenter(activity);
    }

    public static String getVersionName() {
        checkInit();
        return SDKControler.getSDKVersionName();
    }

    /**
     * 切换账号
     * 
     * @param activity
     */
    public static void changeAccount(Activity activity) {
        checkInit();
        SDKControler.changeAccount(activity);
    }

    /**
     * 发送进入游戏统计
     * 
     * @param rolename 角色名称
     * @param rolelevel 角色等级
     */
    public static void sendEnterGameStatics(String rolename, int rolelevel, int serverId) {
        checkInit();
        SDKControler.setServerId(serverId);
        StaticsManager
                .sendGameOperationStatics(rolename, rolelevel, StatCmd.CMD_ENTER_GAME_SUCCESS);

        Log.d(SDKControler.KUGOU_SDK_TAG, ">>>>>>>>>>>>>调用进入游戏统计接口---|角色名=" + rolename + "--|角色等级="
                + rolelevel);
    }

    /**
     * 发送退出游戏统计
     * 
     * @param rolename 角色名称
     * @param rolelevel 角色等级
     */
    public static void sendExitGameStatics(String rolename, int rolelevel) {
        checkInit();
        StaticsManager.sendGameOperationStatics(rolename, rolelevel, StatCmd.CMD_EXIT_GAME);
        try {
            Thread.sleep(1000);
        } catch (Exception e) {
            e.printStackTrace();
        }
    }

    /**
     * 释放资源
     * 
     * @param killProcess
     */
    public static void release(boolean killProcess) {
        checkInit();
        SDKControler.release(killProcess);
    }

    /**
     * 获取SDK配置
     * 
     * @return
     */
    public static BaseSDKConfig getSDKConfig() {
        checkInit();
        return SDKControler.getSDKConfig();
    }

    /**
     * 厂商告知SDK游戏信息
     * 
     * @param rolename 角色名，默认空字符串""
     * @param gamelevel 角色等级，默认为0
     */
    public static void notifyGameInfoChanged(final String rolename, final int gamelevel) {
        checkInit();
        StaticsManager.sendGameOperationStatics(rolename, gamelevel, StatCmd.CMD_UPLOAD_GAME_INFO);
    }

    /**
     * 设置调试模式
     * 
     * @param isDebug true为调试模式，false为非调试模式
     */
    public static void setDebugMode(boolean isDebug) {
        SDKControler.setIsDebugMode(isDebug);
    }

    /**
     * 接口Url是否线上正式环境
     * 
     * @return true是 false否
     */
    public static boolean isOfficial() {
        return SDKControler.isOnlineOfficial();
    }
}
